package scalaLearning.part1.works

object Test6 {
  def main(args: Array[String]): Unit = {

    val list: List[Any] = List(1, 2, 3, 4, "scala")

    //TODO 将所有Int类型的数字加1返回，非Int类型则过滤(忽略)掉
    //定义偏函数的第一种方式
    val f1: PartialFunction[Any, Int] = new PartialFunction[Any, Int] {
      override def isDefinedAt(x: Any): Boolean = {
        x.isInstanceOf[Int]
      }

      override def apply(v1: Any): Int = {
        v1.asInstanceOf[Int] + 1
      }
    }
    //调用偏函数
    val list1: List[Int] = list.collect(f1)
    println("偏函数的定义方法一： " + list1)
    //调用偏函数
    val list2: List[Int] = list.collect(f2)
    println("偏函数的定义方法二： " + list2)
    //偏函数的简写方式一
    val list3: List[Int] = list.collect { case x: Int => x + 1 }
    println("偏函数的简写方法一： " + list3)
    //调用偏函数
    val list4: List[Int] = list.collect(f3)
    println("偏函数的简写方法二： " + list4)
  }

  //定义偏函数的第二种方式
  def f2: PartialFunction[Any, Int] = {
    case x: Int => x.toInt + 1
  }

  //偏函数的简写方式二：
  def f3: PartialFunction[Any, Int] = {
    case x: Int => x + 1
  }
}
